/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Test;

/**
 *
 * @author Administrador
 */
// Librerias ...
import java.net.*;
import java.io.*;

public class SocketServidor extends Thread {
// Atributos de la clase.

    private ServerSocket Servidor;
    private Socket Conexion;
// Hilo ...
    public Thread Hilo;
    // Flujo de entrada y salida por objetos ...
    private ObjectInputStream ObjectEntrada;
    private ObjectOutputStream ObjectSalida;
    private int Value;

    public SocketServidor(int Puerto) {
        try {
            // Crea SocketServidor ...
            Servidor = new ServerSocket(Puerto, 100);
        } catch (IOException ex) {
        }
        // Proceso de espera.
        Hilo = new Thread(this);
        Hilo.start();
    } // fin del constructor.

    public void run() {
        try {
            // Escuchar respuesta del Servidor.
            Esperar_Cliente();
            // Iniciar flujos de entrada y salida.
            ObjectSalida = new ObjectOutputStream(Conexion.getOutputStream());
            ObjectSalida.flush();
            ObjectEntrada = new ObjectInputStream(Conexion.getInputStream());
            do {
                //Recibir dato ..
                Value = ObjectEntrada.readInt();
                System.out.println("Cliente dice : " + Value);
                // Devolver dato.
                ObjectSalida.writeInt(Value);
                ObjectSalida.flush();
            } while (true);
        } catch (EOFException e) {
            System.out.println(e);
        } catch (IOException e) {
            System.out.println(e);
        } finally {
            Cerrar();   // cerrar la conexión.
        } // fin del Try Catch
    } // fin del metodo

    private void Esperar_Cliente() throws IOException {
        System.out.println("Esperarando Conexion ");
        Conexion = Servidor.accept(); // permitir al servidor aceptar la conexión
        System.out.println("Conexion de " + Conexion.getInetAddress().getHostName());
    } // fin del metodo.

    private void Cerrar() {
        try {
            // Cerramos Objetos Salida y Entrada
            ObjectSalida.close();
            ObjectEntrada.close();
            // Cerramos Conexion
            Conexion.close();
            Servidor.close();
        } catch (IOException e) {
        }
    } // fin del metodo.
}  // fin de la clase

